✅ 사용자 스토리(시나리오)에 맞춰 수행하는 테스트
✅ 개발자와 이해관계자들 간의 토의를 통해 만들어진 시나리오에 기반해 테스트
✅ 실제 HTTP 요청을 보내고 응답을 확인하는 최상위 레벨의 테스트
📌 특징
사용자 관점에서 동작 검증
- 단순한 코드 실행이 아니라, 실제 사용자의 시나리오를 검증함.
- 예: "사용자가 회원 가입을 하면, 로그인할 수 있어야 한다."
전체 시스템을 테스트 (E2E 포함)
- REST API, 데이터베이스, 보안 설정 등 전체 애플리케이션의 동작을 포함한 검증
- 단순한 API 응답뿐만 아니라, 비즈니스 로직, DB 반영 여부까지 확인 가능
REST API 기반의 테스트가 일반적
RestAssured를 사용하여 HTTP 요청-응답을 기반으로 검증- Spring Boot에서는
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)를 사용하여 서버를 띄워 테스트
📌 REST-assured
✅ REST API를 테스트하기 위한 Java 기반의 라이브러리
✅ HTTP 요청을 보내고, 응답을 검증하는 기능을 제공
✅ Spring Boot, JUnit과 함께 API 테스트를 수행할 때 많이 사용됨
REST Assured는 2.0 버전 이후로 BDD 스타일(Given-When-Then)을 기반으로 API 테스트를 작성하도록 설계되었다.
Given(설정-요청 준비)
| 기능 | 설명 | 예제 |
|---|---|---|
baseUri() |
기본 URL 설정 | given().baseUri("http://localhost:8080") |
basePath() |
기본 경로 설정 | given().basePath("/users") |
port() |
포트 설정 | given().port(8080) |
header() |
요청 헤더 설정 | given().header("Authorization", "Bearer token") |
contentType() |
요청 데이터 타입 설정 | given().contentType("application/json") |
body() |
요청 본문 (JSON, XML 등) 설정 | given().body("{ \"name\": \"Alice\" }") |
pathParam() |
경로 변수 설정 | given().pathParam("id", 1) |
queryParam() |
쿼리 파라미터 설정 | given().queryParam("sort", "name") |
- API 요청을 보낼 때 필요한 정보(헤더, 파라미터, 본문 등)을 설정한다.
🔹 Default Values
REST-assured는 기본적으로 host를 localhost, port를 8080으로 지정하지만, 메서드나 설정 파일을 통해 값을 변경할 수 있다.
메서드
given().port(80). ..설정 파일
RestAssured.baseURI = "http://myhost.org";When(행위-요청 실행)
| 기능 | 설명 | 예제 |
|---|---|---|
get() |
GET 요청 전송 | when().get("/users/{id}") |
post() |
POST 요청 전송 | when().post("/users") |
put() |
PUT 요청 전송 | when().put("/users/{id}") |
delete() |
DELETE 요청 전송 | when().delete("/users/{id}") |
patch() |
PATCH 요청 전송 | when().patch("/users/{id}") |
- 설정된 요청을 실행해 실제 HTTP 요청을 보낸다.
Then(검증-응답 확인)
| 기능 | 설명 | 예제 |
|---|---|---|
statusCode() |
HTTP 상태 코드 검증 | then().statusCode(200) |
body() |
응답 본문(JSON, XML 등) 값 검증 | then().body("name", equalTo("Alice")) |
header() |
응답 헤더 값 검증 | then().header("Content-Type", "application/json") |
time() |
응답 시간 검증 | then().time(lessThan(2000L)) |
extract() |
응답 값 추출 | then().extract().jsonPath().getString("token") |
- 응답이 예상한 값과 일치하는지 검증한다.
🔹 ExtractableResponse
extract() 메서드를 통해 응답 정보를 담은 객체를 반환받아 AssertJ로 테스트할 수 있다.
protected void 회원가입_검증(ExtractableResponse response) {
int code = response.statusCode();
assertThat(code).isEqualTo(HttpStatus.CREATED.value());
}vs MockMVC
✅ REST Assured와 MockMvc는 둘 다 API 테스트를 수행할 수 있지만, 사용하는 환경이 다름
✅ MockMvc는 실제 HTTP 요청을 보내지 않고, Controller 계층을 Mock으로 테스트하는 반면, RestAssured는 실제 서버에서 테스트를 수행
| 테스트 방식 | 설명 | 실제 네트워크 요청 | Spring 컨텍스트 필요 여부 |
|---|---|---|---|
| MockMvc | Controller 계층만 테스트 | ❌ | ⭕ |
| Rest Assured | 전체 애플리케이션을 실행하고 API 테스트 수행 | ⭕ | ⭕ |
📌 참고
https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/
https://github.com/rest-assured/rest-assured/wiki/Usage
https://www.baeldung.com/rest-assured-tutorial